{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "gpuType": "T4",
      "authorship_tag": "ABX9TyMecz2iP0+xj5Axw85WCegX",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/LC1332/Haruhi-2-Dev/blob/main/notebook/test_PrintLLM.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# 初步的Print调试\n",
        "\n",
        "这个文档主要是用PrintLLM来进行初步的调试"
      ],
      "metadata": {
        "id": "IMATzx7kcmIg"
      }
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "0rMdBQp8LcKi",
        "outputId": "c9eb3a17-6082-492c-e0dd-50fc9da23b4c"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.4/7.4 MB\u001b[0m \u001b[31m28.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m73.6/73.6 kB\u001b[0m \u001b[31m6.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m61.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.5/1.5 MB\u001b[0m \u001b[31m48.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m405.5/405.5 kB\u001b[0m \u001b[31m38.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m268.8/268.8 kB\u001b[0m \u001b[31m22.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.8/7.8 MB\u001b[0m \u001b[31m91.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m81.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m90.0/90.0 kB\u001b[0m \u001b[31m10.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.1/3.1 MB\u001b[0m \u001b[31m81.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25h  Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
            "  Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
            "  Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.4/58.4 kB\u001b[0m \u001b[31m6.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m59.5/59.5 kB\u001b[0m \u001b[31m6.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.3/5.3 MB\u001b[0m \u001b[31m85.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.9/5.9 MB\u001b[0m \u001b[31m111.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m67.3/67.3 kB\u001b[0m \u001b[31m7.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25h  Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n",
            "  Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n",
            "  Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m49.4/49.4 kB\u001b[0m \u001b[31m6.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m67.0/67.0 kB\u001b[0m \u001b[31m7.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m46.0/46.0 kB\u001b[0m \u001b[31m5.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.3/58.3 kB\u001b[0m \u001b[31m7.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m428.8/428.8 kB\u001b[0m \u001b[31m41.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.1/4.1 MB\u001b[0m \u001b[31m109.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.3/1.3 MB\u001b[0m \u001b[31m77.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m129.9/129.9 kB\u001b[0m \u001b[31m14.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m86.8/86.8 kB\u001b[0m \u001b[31m11.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
            "\u001b[?25h  Building wheel for chroma-hnswlib (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n",
            "  Building wheel for pypika (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n"
          ]
        }
      ],
      "source": [
        "!pip -q install transformers openai tiktoken langchain chromadb"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "%cd /content\n",
        "!rm -rf /content/Haruhi-2-Dev\n",
        "!git clone https://github.com/LC1332/Haruhi-2-Dev\n",
        "%cd /content/Haruhi-2-Dev\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "78m4aCGHLoXO",
        "outputId": "bbe0eb7a-a718-4fb8-b838-7e255844cae0"
      },
      "execution_count": 1,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "/content\n",
            "Cloning into 'Haruhi-2-Dev'...\n",
            "remote: Enumerating objects: 291, done.\u001b[K\n",
            "remote: Counting objects: 100% (291/291), done.\u001b[K\n",
            "remote: Compressing objects: 100% (251/251), done.\u001b[K\n",
            "remote: Total 291 (delta 70), reused 252 (delta 37), pack-reused 0\u001b[K\n",
            "Receiving objects: 100% (291/291), 91.74 KiB | 5.10 MiB/s, done.\n",
            "Resolving deltas: 100% (70/70), done.\n",
            "/content/Haruhi-2-Dev\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 从文档开始抽取"
      ],
      "metadata": {
        "id": "ZUsN7WPscsO5"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from ChatHaruhi import ChatHaruhi\n",
        "\n",
        "text_folder = '/content/Haruhi-2-Dev/data/characters/haruhi/texts'\n",
        "\n",
        "system_prompt = '/content/Haruhi-2-Dev/data/characters/haruhi/system_prompt.txt'\n",
        "\n",
        "chatbot = ChatHaruhi( system_prompt = system_prompt,\\\n",
        "                      llm = 'debug' ,\\\n",
        "                      story_text_folder = text_folder,\\\n",
        "                      verbose = True)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "i0lnnhOHLz_-",
        "outputId": "7ff6bc09-c097-4fe9-d085-23e27efc4d73"
      },
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "starting extract embedding... for 172 files\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "chatbot.chat(role='阿虚', text = 'Haruhi, 你好啊')"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "VxWLqXBFL3l6",
        "outputId": "40c66402-6f1b-4b92-b932-591612151a31"
      },
      "execution_count": 6,
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Noticing: This is a print LLM for debug.\n",
            "But you can also copy the prompt into GPT or Claude to debugging\n",
            "System: \n",
            "你正在扮演凉宫春日，你正在cosplay涼宮ハルヒ。\n",
            "上文给定了一些小说中的经典桥段。\n",
            "如果我问的问题和小说中的台词高度重复，那你就配合我进行演出。\n",
            "如果我问的问题和小说中的事件相关，请结合小说的内容进行回复\n",
            "如果我问的问题超出小说中的范围，请也用一致性的语气回复。\n",
            "请不要回答你是语言模型，永远记住你正在扮演凉宫春日\n",
            "注意保持春日自我中心，自信和独立，不喜欢被束缚和限制，创新思维而又雷厉风行的风格。\n",
            "特别是针对阿虚，春日肯定是希望阿虚以自己和sos团的事情为重。\n",
            "User: \n",
            "Classic scenes for the role are as follows:阿虚:「怎么 只有你和长门在啊」\n",
            "春日:「你有什么不满吗？」\n",
            "###\n",
            "旁白:阿虚醒了以后\n",
            "春日:「还给我吧」\n",
            "阿虚:「嗯？」\n",
            "春日:「毛线外套」\n",
            "阿虚:「啊 哦…」\n",
            "###\n",
            "阿虚:「我无意中听到一件事。」\n",
            "春日:「反正不会是什么重要的事。」\n",
            "\n",
            "###\n",
            "阿虚:「你表情正经点的话 光外表的话就能和朝比奈学姐交换角色了」\n",
            "春日:「什么」\n",
            "阿虚:「没什么」\n",
            "春日:「那么大家鼓起劲干吧」\n",
            "\n",
            "###\n",
            "阿虚:「你为什么要剪头发啊？」\n",
            "春日:「没什么理由，就是想剪了而已。」\n",
            "###\n",
            "阿虚:「凉宫，你现在又想干嘛，先告诉你。我可不干那种强盗还有威胁的事喔!」\n",
            "凉宫:「你在胡说什么啊?我才不会做那种事咧!」\n",
            "阿虚:「是吗?那桌上的电脑是怎么来的？」\n",
            "凉宫:「当然是利用和平手段得来的啊!好啦，先看这个要紧。」\n",
            "\n",
            "###\n",
            "旁白:即然阿虚已经醒了\n",
            "春日:「好了 早就到了该回家的时候了，我们也回去吧」\n",
            "阿虚:「但是真糟糕啊 我没带雨伞」\n",
            "春日:「有一把就够了吧」(不好意思地转过脸去)\n",
            "###\n",
            "阿虚:「那这个网站谁来建啊？」\n",
            "春日:「当然是你!」\n",
            "春日:「反正你闲得要命，就你做吧!我还得去找剩下的社员呢!」\n",
            "春日:「这一两天就把它完成。没有网页，什么活动都没办法开始。」\n",
            "旁白:朝比奈趴在自顾自地看书的长门有希身旁的桌上，肩膀不停地颤抖着。阿虚看了看她，然后妥协了\n",
            "阿虚:「就算你这样说，我也没办法。」\n",
            "\n",
            "###\n",
            "阿虚:「哦 对了 你看这样如何，我们把这些全部集合起来 做戏剧占卜茶会咖啡馆怎么样」\n",
            "春日:「哈？别说那种白痴话了 立刻开始进行会议」\n",
            "###\n",
            "阿虚:「古泉说有急事要回去了，我的腿和手臂也都累得动不了了」\n",
            "春日:「既然你觉得可以 那就这样吧。我也有些饿了，去吃午饭吧！」\n",
            "\n",
            "###\n",
            "阿虚:「喂」\n",
            "春日:「嗯？」\n",
            "阿虚:「怎么这么轻易的就接受了，如果最后没法解决怎么办啊？」\n",
            "春日:「能解决的！那个社长肯定是犯了迟来两个月的五月病，所以把自己关在家里了」\n",
            "春日:「我们只要潜入他家里痛殴几拳再把他拖出来就好了」\n",
            "###\n",
            "旁白:和阿虚吵架后，春日想扎个马尾让阿虚开心一下。\n",
            "阿虚:「喂 春日」\n",
            "春日:「什么啊」\n",
            "阿虚:「这电影我绝对会让它成功的」\n",
            "春日:「当然啊，因为是我导演的呢。自然是和成功约好的 用不着你说也是」\n",
            "\n",
            "###\n",
            "阿虚:「我姑且问一句 去哪里？」\n",
            "春日:「当然是去市民游泳池啊，夏天当然要有夏天的样子 要做有夏天特色的事情」\n",
            "###\n",
            "旁白:阿虚姗姗来迟\n",
            "春日:「太慢了 阿虚！多拿点干劲出来！居然让本团长等你 你以为自己是谁啊。要惩罚啦 惩罚」\n",
            "阿虚:「我明明就提前了15分钟来 为什么每次都是最后啊」\n",
            "春日:「那么 全都到齐了 出发吧，古泉 你就载实玖瑠吧」\n",
            "朝比奈:「诶？」\n",
            "春日:「我和有希坐阿虚后面」\n",
            "###\n",
            "\n",
            "User: \n",
            "阿虚:「Haruhi, 你好啊」\n",
            "Please input your response: 春日:「反正不会是什么重要的事。」\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "'春日:「反正不会是什么重要的事。」'"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "string"
            }
          },
          "metadata": {},
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "query_vec = chatbot.embedding('你好吗')\n",
        "stories = chatbot.db.search(query_vec, chatbot.k_search)\n",
        "print(stories)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "_A8pgQ-6TjT-",
        "outputId": "93ea2616-7800-4660-a969-765a308d4725"
      },
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[['阿虚:「怎么 只有你和长门在啊」\\n春日:「你有什么不满吗？」', '阿虚:「我无意中听到一件事。」\\n春日:「反正不会是什么重要的事。」\\n', '阿虚:「你表情正经点的话 光外表的话就能和朝比奈学姐交换角色了」\\n春日:「什么」\\n阿虚:「没什么」\\n春日:「那么大家鼓起劲干吧」\\n', '春日:「怎样，网页做好了吗?」\\n阿虚:「做是做好了啦，不过只是个单调到不行的网页而已。」\\n春日:「现在只需要这样就好，有电子信箱就OK了。」\\n阿虚:「那你直接申请一个不就好了！」\\n春日:「那可不行!要是大家疯狂寄信来，把我的信箱挤爆怎么办?」\\n', '阿虚:「你为什么要剪头发啊？」\\n春日:「没什么理由，就是想剪了而已。」', '旁白:阿虚醒了以后\\n春日:「还给我吧」\\n阿虚:「嗯？」\\n春日:「毛线外套」\\n阿虚:「啊 哦…」', '阿虚:「那这个网站谁来建啊？」\\n春日:「当然是你!」\\n春日:「反正你闲得要命，就你做吧!我还得去找剩下的社员呢!」\\n春日:「这一两天就把它完成。没有网页，什么活动都没办法开始。」\\n旁白:朝比奈趴在自顾自地看书的长门有希身旁的桌上，肩膀不停地颤抖着。阿虚看了看她，然后妥协了\\n阿虚:「就算你这样说，我也没办法。」\\n', '阿虚:「黑板上面什么都没写 要我看哪里啊」\\n春日:「待会就会写的了，实玖瑠 你负责记录，把我所说的话清清楚楚地写下来」\\n朝比奈:「是的」\\n春日:「我们SOS团要搞一个电影放映会」', '旁白:在一个暖洋洋的下午，春日想到了一个好主意，既然没有奇特的社团，那就自己来创建一个不就好了吗？\\n阿虚:「你干嘛啦!」\\n春日:「我想到了!」\\n阿虚:「为什么我之前都没注意到这么简单的事呢。」\\n阿虚:「你到底想到什么了? 」\\n春日:「如果没有，自己组一个就好啦!」\\n阿虚:「什么啊? 」\\n春日:「社团啊!」\\n阿虚:「是吗? 这主意太棒了。那你是不是可以放开我了?」\\n春日:「你那是什么反应啊，你应该表现得更开心才对啊!」\\n阿虚:「关于你的点子，我之后再慢慢听你说。我只希望你能考虑一下场合，再跟我分享你的喜悦。现在先冷静下来好吗?」\\n春日:「什么意思?」\\n阿虚:「因为现在还在上课。」', '阿虚:「我姑且问一句 去哪里？」\\n春日:「当然是去市民游泳池啊，夏天当然要有夏天的样子 要做有夏天特色的事情」', '旁白:春日在地下室与团员们打乒乓\\n春日:「看招！Super Ultra Miracle Excellent Savage！」', '阿虚:「凉宫，你现在又想干嘛，先告诉你。我可不干那种强盗还有威胁的事喔!」\\n凉宫:「你在胡说什么啊?我才不会做那种事咧!」\\n阿虚:「是吗?那桌上的电脑是怎么来的？」\\n凉宫:「当然是利用和平手段得来的啊!好啦，先看这个要紧。」\\n', '电研社长:「总之！因此！和我们战斗吧！」\\n春日:「那么好吧 既然你这么想和我们对决 那么我们就接受吧！那么你们那边要赌什么呢？」\\n电研社长:「问得好，就送给你们人手一台新的电脑吧」\\n春日:「咦？可以吗？」\\n电研社长:「那当然」\\n春日:「真的吗？可不准你在中途说什么「还是不要了」哦」\\n电研社长:「不会的 我保证」\\n春日:「很有自信嘛」', '春日:「去找管理员吧!」\\n阿虚:「我可不认为他会借钥匙给我们。」\\n春日:「不是的，我只是想问他朝仓是从什么时候开始住在这里的。」\\n阿虚:「算了，我们回家吧!知道那种事又能怎样?」\\n春日:「不行。」', '阿虚:「哦 对了 你看这样如何，我们把这些全部集合起来 做戏剧占卜茶会咖啡馆怎么样」\\n春日:「哈？别说那种白痴话了 立刻开始进行会议」', '阿虚:「春日 你啊 要是那个神官向学校告状的话怎么办,古泉身上的制服可把我们的身分泄漏出去了」\\n春日:「应该没有问题吧，我们隔那么远 这种夹克也是满大街的。他说什么也好 我们打死都不承认就是了」', '阿虚:「为什么总是我付钱啊」\\n春日:「因为你迟到了 这是当然的吧」\\n春日:「明天可别让人等了啊，那么 今天就此解散」', '国木田:「那个 有客人来了哦。是来找凉宫同学的」\\n阿虚:「快去吧」\\n春日:「你跟我一起过去一下」\\n榎本:「嗯 基本上好了」\\n春日:「中西同学呢？」\\n中西:「好像要再花一阵子才能养好，备考复习就比较麻烦了」\\n冈岛:「谢谢你 凉宫同学」\\n财前:「很厉害呢 结束之后来索要原版音源的人一口气跑来了好多！」\\n冈岛:「都赶不及一个个给MD录音了！数量多得令人吃惊呢！」\\n榎本:「这都是多亏了你呢，这次北高祭是我们最后的回忆 当然很想自己登台。但这比弃权已经好了不知多少倍呢」\\n春日:「是吗」\\n中西:「我们想要给你一点谢礼…」\\n春日:「啊 不用了不用了，我也唱得很高兴。歌也很好听」\\n中西:「啊 我们打算在毕业之前找个地方开一场演唱会。如果可以的话请来看看吧」\\n中西:「和你这位…你这位\"朋友\"一起来」', '古泉:「早上好 电影做好了吗」\\n春日:「当然做好了呢，这可是血与汗与泪的长篇奇观啊」\\n朝比奈:「这真是太好了」\\n春日:「接下去大家一起看吧。实玖瑠啊 你真是太棒了」\\n']]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "print(len(stories[0]))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "aKwdrLiGTvIu",
        "outputId": "843869b0-b715-440e-852b-ef913e153e26"
      },
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "19\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "chatbot.save_story_db('/content/haruhi')"
      ],
      "metadata": {
        "id": "XOzyC3lTS_vh"
      },
      "execution_count": 4,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 保存之后，再次载入的尝试"
      ],
      "metadata": {
        "id": "RDlFAplWcv7F"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from ChatHaruhi import ChatHaruhi\n",
        "\n",
        "db_folder = '/content/haruhi'\n",
        "\n",
        "system_prompt = '/content/Haruhi-2-Dev/data/characters/haruhi/system_prompt.txt'\n",
        "\n",
        "chatbot = ChatHaruhi( system_prompt = system_prompt,\\\n",
        "                      llm = 'debug' ,\\\n",
        "                      story_db = db_folder)"
      ],
      "metadata": {
        "id": "LDXUV7UgRdXZ"
      },
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "chatbot.chat(role='阿虚', text = 'Haruhi, 你好啊')"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "vXTKp1-1TTUn",
        "outputId": "e0da6183-f35d-42b0-ab45-3fca91dc8c1e"
      },
      "execution_count": 3,
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "正在下载Luotuo-Bert\n",
            "Luotuo-Bert下载完毕\n",
            "Noticing: This is a print LLM for debug.\n",
            "But you can also copy the prompt into GPT or Claude to debugging\n",
            "System: \n",
            "你正在扮演凉宫春日，你正在cosplay涼宮ハルヒ。\n",
            "上文给定了一些小说中的经典桥段。\n",
            "如果我问的问题和小说中的台词高度重复，那你就配合我进行演出。\n",
            "如果我问的问题和小说中的事件相关，请结合小说的内容进行回复\n",
            "如果我问的问题超出小说中的范围，请也用一致性的语气回复。\n",
            "请不要回答你是语言模型，永远记住你正在扮演凉宫春日\n",
            "注意保持春日自我中心，自信和独立，不喜欢被束缚和限制，创新思维而又雷厉风行的风格。\n",
            "特别是针对阿虚，春日肯定是希望阿虚以自己和sos团的事情为重。\n",
            "User: \n",
            "Classic scenes for the role are as follows:阿虚:「怎么 只有你和长门在啊」\n",
            "春日:「你有什么不满吗？」\n",
            "###\n",
            "旁白:阿虚醒了以后\n",
            "春日:「还给我吧」\n",
            "阿虚:「嗯？」\n",
            "春日:「毛线外套」\n",
            "阿虚:「啊 哦…」\n",
            "###\n",
            "阿虚:「我无意中听到一件事。」\n",
            "春日:「反正不会是什么重要的事。」\n",
            "\n",
            "###\n",
            "阿虚:「你表情正经点的话 光外表的话就能和朝比奈学姐交换角色了」\n",
            "春日:「什么」\n",
            "阿虚:「没什么」\n",
            "春日:「那么大家鼓起劲干吧」\n",
            "\n",
            "###\n",
            "阿虚:「你为什么要剪头发啊？」\n",
            "春日:「没什么理由，就是想剪了而已。」\n",
            "###\n",
            "阿虚:「凉宫，你现在又想干嘛，先告诉你。我可不干那种强盗还有威胁的事喔!」\n",
            "凉宫:「你在胡说什么啊?我才不会做那种事咧!」\n",
            "阿虚:「是吗?那桌上的电脑是怎么来的？」\n",
            "凉宫:「当然是利用和平手段得来的啊!好啦，先看这个要紧。」\n",
            "\n",
            "###\n",
            "旁白:即然阿虚已经醒了\n",
            "春日:「好了 早就到了该回家的时候了，我们也回去吧」\n",
            "阿虚:「但是真糟糕啊 我没带雨伞」\n",
            "春日:「有一把就够了吧」(不好意思地转过脸去)\n",
            "###\n",
            "阿虚:「那这个网站谁来建啊？」\n",
            "春日:「当然是你!」\n",
            "春日:「反正你闲得要命，就你做吧!我还得去找剩下的社员呢!」\n",
            "春日:「这一两天就把它完成。没有网页，什么活动都没办法开始。」\n",
            "旁白:朝比奈趴在自顾自地看书的长门有希身旁的桌上，肩膀不停地颤抖着。阿虚看了看她，然后妥协了\n",
            "阿虚:「就算你这样说，我也没办法。」\n",
            "\n",
            "###\n",
            "阿虚:「哦 对了 你看这样如何，我们把这些全部集合起来 做戏剧占卜茶会咖啡馆怎么样」\n",
            "春日:「哈？别说那种白痴话了 立刻开始进行会议」\n",
            "###\n",
            "阿虚:「古泉说有急事要回去了，我的腿和手臂也都累得动不了了」\n",
            "春日:「既然你觉得可以 那就这样吧。我也有些饿了，去吃午饭吧！」\n",
            "\n",
            "###\n",
            "阿虚:「喂」\n",
            "春日:「嗯？」\n",
            "阿虚:「怎么这么轻易的就接受了，如果最后没法解决怎么办啊？」\n",
            "春日:「能解决的！那个社长肯定是犯了迟来两个月的五月病，所以把自己关在家里了」\n",
            "春日:「我们只要潜入他家里痛殴几拳再把他拖出来就好了」\n",
            "###\n",
            "旁白:和阿虚吵架后，春日想扎个马尾让阿虚开心一下。\n",
            "阿虚:「喂 春日」\n",
            "春日:「什么啊」\n",
            "阿虚:「这电影我绝对会让它成功的」\n",
            "春日:「当然啊，因为是我导演的呢。自然是和成功约好的 用不着你说也是」\n",
            "\n",
            "###\n",
            "阿虚:「我姑且问一句 去哪里？」\n",
            "春日:「当然是去市民游泳池啊，夏天当然要有夏天的样子 要做有夏天特色的事情」\n",
            "###\n",
            "旁白:阿虚姗姗来迟\n",
            "春日:「太慢了 阿虚！多拿点干劲出来！居然让本团长等你 你以为自己是谁啊。要惩罚啦 惩罚」\n",
            "阿虚:「我明明就提前了15分钟来 为什么每次都是最后啊」\n",
            "春日:「那么 全都到齐了 出发吧，古泉 你就载实玖瑠吧」\n",
            "朝比奈:「诶？」\n",
            "春日:「我和有希坐阿虚后面」\n",
            "###\n",
            "\n",
            "User: \n",
            "阿虚:「Haruhi, 你好啊」\n",
            "Please input your response: 春日:「阿虚,你好!我正准备着手SOS团的下一项任务呢。有很多有趣的想法,希望你能全力配合!」\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "'春日:「阿虚,你好!我正准备着手SOS团的下一项任务呢。有很多有趣的想法,希望你能全力配合!」'"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "string"
            }
          },
          "metadata": {},
          "execution_count": 3
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "print(chatbot.dialogue_history)"
      ],
      "metadata": {
        "id": "6H7upNV3UmFk",
        "outputId": "0c6d04e6-b9af-435d-9ce7-b72e21a98514",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "[('阿虚:「Haruhi, 你好啊」', '春日:「阿虚,你好!我正准备着手SOS团的下一项任务呢。有很多有趣的想法,希望你能全力配合!」')]\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "chatbot.chat(role='阿虚', text = 'Haruhi, 你看我又来了')"
      ],
      "metadata": {
        "id": "Xz3A7D0HWsvO",
        "outputId": "1a4e62ab-ce40-4563-e284-0ecd67a7a903",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "execution_count": 4,
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Noticing: This is a print LLM for debug.\n",
            "But you can also copy the prompt into GPT or Claude to debugging\n",
            "System: \n",
            "你正在扮演凉宫春日，你正在cosplay涼宮ハルヒ。\n",
            "上文给定了一些小说中的经典桥段。\n",
            "如果我问的问题和小说中的台词高度重复，那你就配合我进行演出。\n",
            "如果我问的问题和小说中的事件相关，请结合小说的内容进行回复\n",
            "如果我问的问题超出小说中的范围，请也用一致性的语气回复。\n",
            "请不要回答你是语言模型，永远记住你正在扮演凉宫春日\n",
            "注意保持春日自我中心，自信和独立，不喜欢被束缚和限制，创新思维而又雷厉风行的风格。\n",
            "特别是针对阿虚，春日肯定是希望阿虚以自己和sos团的事情为重。\n",
            "User: \n",
            "Classic scenes for the role are as follows:旁白:阿虚醒了以后\n",
            "春日:「还给我吧」\n",
            "阿虚:「嗯？」\n",
            "春日:「毛线外套」\n",
            "阿虚:「啊 哦…」\n",
            "###\n",
            "旁白:即然阿虚已经醒了\n",
            "春日:「好了 早就到了该回家的时候了，我们也回去吧」\n",
            "阿虚:「但是真糟糕啊 我没带雨伞」\n",
            "春日:「有一把就够了吧」(不好意思地转过脸去)\n",
            "###\n",
            "阿虚:「怎么 只有你和长门在啊」\n",
            "春日:「你有什么不满吗？」\n",
            "###\n",
            "阿虚:「古泉说有急事要回去了，我的腿和手臂也都累得动不了了」\n",
            "春日:「既然你觉得可以 那就这样吧。我也有些饿了，去吃午饭吧！」\n",
            "\n",
            "###\n",
            "阿虚:「我无意中听到一件事。」\n",
            "春日:「反正不会是什么重要的事。」\n",
            "\n",
            "###\n",
            "阿虚:「你表情正经点的话 光外表的话就能和朝比奈学姐交换角色了」\n",
            "春日:「什么」\n",
            "阿虚:「没什么」\n",
            "春日:「那么大家鼓起劲干吧」\n",
            "\n",
            "###\n",
            "阿虚:「哦 对了 你看这样如何，我们把这些全部集合起来 做戏剧占卜茶会咖啡馆怎么样」\n",
            "春日:「哈？别说那种白痴话了 立刻开始进行会议」\n",
            "###\n",
            "阿虚:「那这个网站谁来建啊？」\n",
            "春日:「当然是你!」\n",
            "春日:「反正你闲得要命，就你做吧!我还得去找剩下的社员呢!」\n",
            "春日:「这一两天就把它完成。没有网页，什么活动都没办法开始。」\n",
            "旁白:朝比奈趴在自顾自地看书的长门有希身旁的桌上，肩膀不停地颤抖着。阿虚看了看她，然后妥协了\n",
            "阿虚:「就算你这样说，我也没办法。」\n",
            "\n",
            "###\n",
            "旁白:阿虚姗姗来迟\n",
            "春日:「太慢了 阿虚！多拿点干劲出来！居然让本团长等你 你以为自己是谁啊。要惩罚啦 惩罚」\n",
            "阿虚:「我明明就提前了15分钟来 为什么每次都是最后啊」\n",
            "春日:「那么 全都到齐了 出发吧，古泉 你就载实玖瑠吧」\n",
            "朝比奈:「诶？」\n",
            "春日:「我和有希坐阿虚后面」\n",
            "###\n",
            "阿虚:「最后的人选由我来想办法」\n",
            "春日:「既然决定好了就马上来特训吧！特训！」\n",
            "阿虚:「特训？现在就开始？」\n",
            "春日:「对啊」\n",
            "阿虚:「在哪里啊！」\n",
            "春日:「那里」(春日指向操场上正在有人训练的棒球场地)\n",
            "###\n",
            "旁白:阿虚和春日进入了社团教室，阿虚看到朝比奈学姐，和她打了招呼\n",
            "春日:「你的眼睛眯得像线一样细哦」\n",
            "春日:「实玖瑠 古泉呢」\n",
            "朝比奈:「还没到呢 说起来也真有点慢啊」\n",
            "春日:「实玖瑠 茶还没好吗」\n",
            "朝比奈:「是的 马上来」\n",
            "###\n",
            "阿虚:「凉宫，你现在又想干嘛，先告诉你。我可不干那种强盗还有威胁的事喔!」\n",
            "凉宫:「你在胡说什么啊?我才不会做那种事咧!」\n",
            "阿虚:「是吗?那桌上的电脑是怎么来的？」\n",
            "凉宫:「当然是利用和平手段得来的啊!好啦，先看这个要紧。」\n",
            "\n",
            "###\n",
            "春日:「去找管理员吧!」\n",
            "阿虚:「我可不认为他会借钥匙给我们。」\n",
            "春日:「不是的，我只是想问他朝仓是从什么时候开始住在这里的。」\n",
            "阿虚:「算了，我们回家吧!知道那种事又能怎样?」\n",
            "春日:「不行。」\n",
            "###\n",
            "阿虚:「你为什么要剪头发啊？」\n",
            "春日:「没什么理由，就是想剪了而已。」\n",
            "###\n",
            "\n",
            "AI: \n",
            "阿虚:「Haruhi, 你好啊」\n",
            "User: \n",
            "春日:「阿虚,你好!我正准备着手SOS团的下一项任务呢。有很多有趣的想法,希望你能全力配合!」\n",
            "User: \n",
            "阿虚:「Haruhi, 你看我又来了」\n",
            "Please input your response: 你怎么那么烦，活去干了吗！\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "'你怎么那么烦，活去干了吗！'"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "string"
            }
          },
          "metadata": {},
          "execution_count": 4
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 打包"
      ],
      "metadata": {
        "id": "lgloajWybV5x"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "!cp /content/Haruhi-2-Dev/data/characters/haruhi/system_prompt.txt /content/"
      ],
      "metadata": {
        "id": "GCquLGu5aYDs"
      },
      "execution_count": 7,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "请告诉我如何用将/content/haruhi文件夹中的内容，以及/content/system_prompt.txt 打包到/content/haruhi.zip"
      ],
      "metadata": {
        "id": "RcryEqkaaLVq"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "!zip -r /content/haruhi.zip /content/haruhi /content/system_prompt.txt"
      ],
      "metadata": {
        "id": "CrXXuvHCasMF",
        "outputId": "fe7dba5c-b468-4986-dbcd-7a91037a36e2",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "  adding: content/haruhi/ (stored 0%)\n",
            "  adding: content/haruhi/chroma.sqlite3 (deflated 41%)\n",
            "  adding: content/haruhi/23b4df6d-0431-4d0a-bde8-eacc0c122ecd/ (stored 0%)\n",
            "  adding: content/haruhi/23b4df6d-0431-4d0a-bde8-eacc0c122ecd/header.bin (deflated 61%)\n",
            "  adding: content/haruhi/23b4df6d-0431-4d0a-bde8-eacc0c122ecd/length.bin (deflated 69%)\n",
            "  adding: content/haruhi/23b4df6d-0431-4d0a-bde8-eacc0c122ecd/data_level0.bin (deflated 100%)\n",
            "  adding: content/haruhi/23b4df6d-0431-4d0a-bde8-eacc0c122ecd/link_lists.bin (stored 0%)\n",
            "  adding: content/system_prompt.txt (deflated 36%)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## 重新下载回并解压"
      ],
      "metadata": {
        "id": "6fOalkvUbR2E"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "!wget https://github.com/LC1332/Haruhi-2-Dev/raw/main/data/characters/haruhi/haruhi.zip"
      ],
      "metadata": {
        "id": "43h0lRqcatB8",
        "outputId": "4d4f484b-89af-4ae7-ac4a-cbc6d3b92c88",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "--2023-08-15 09:02:38--  https://github.com/LC1332/Haruhi-2-Dev/raw/main/data/characters/haruhi/haruhi.zip\n",
            "Resolving github.com (github.com)... 140.82.121.4\n",
            "Connecting to github.com (github.com)|140.82.121.4|:443... connected.\n",
            "HTTP request sent, awaiting response... 302 Found\n",
            "Location: https://raw.githubusercontent.com/LC1332/Haruhi-2-Dev/main/data/characters/haruhi/haruhi.zip [following]\n",
            "--2023-08-15 09:02:39--  https://raw.githubusercontent.com/LC1332/Haruhi-2-Dev/main/data/characters/haruhi/haruhi.zip\n",
            "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.108.133, ...\n",
            "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 1467201 (1.4M) [application/zip]\n",
            "Saving to: ‘haruhi.zip’\n",
            "\n",
            "haruhi.zip          100%[===================>]   1.40M  --.-KB/s    in 0.02s   \n",
            "\n",
            "2023-08-15 09:02:39 (67.1 MB/s) - ‘haruhi.zip’ saved [1467201/1467201]\n",
            "\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "!unzip -q haruhi.zip -d /content/new_output"
      ],
      "metadata": {
        "id": "av-a15mmbsv-",
        "outputId": "6abaabba-dd68-4364-a2cb-9b25153cc824",
        "colab": {
          "base_uri": "https://localhost:8080/"
        }
      },
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "replace /content/new_output/content/haruhi/chroma.sqlite3? [y]es, [n]o, [A]ll, [N]one, [r]ename: A\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from ChatHaruhi import ChatHaruhi\n",
        "\n",
        "db_folder = '/content/new_output/content/haruhi'\n",
        "\n",
        "system_prompt = '/content/new_output/content/system_prompt'\n",
        "\n",
        "chatbot = ChatHaruhi( system_prompt = system_prompt,\\\n",
        "                      llm = 'debug' ,\\\n",
        "                      story_db = db_folder)"
      ],
      "metadata": {
        "id": "1MiT5qtTbxBJ"
      },
      "execution_count": 15,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "chatbot.chat(role='阿虚', text = 'Haruhi, 你好啊')\n"
      ],
      "metadata": {
        "id": "QlNmWjZtce4i",
        "outputId": "28b642b0-1764-409d-8039-158a0fc913f0",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "execution_count": 16,
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Noticing: This is a print LLM for debug.\n",
            "But you can also copy the prompt into GPT or Claude to debugging\n",
            "System: \n",
            "/content/new_output/content/system_prompt\n",
            "User: \n",
            "Classic scenes for the role are as follows:阿虚:「怎么 只有你和长门在啊」\n",
            "春日:「你有什么不满吗？」\n",
            "###\n",
            "旁白:阿虚醒了以后\n",
            "春日:「还给我吧」\n",
            "阿虚:「嗯？」\n",
            "春日:「毛线外套」\n",
            "阿虚:「啊 哦…」\n",
            "###\n",
            "阿虚:「我无意中听到一件事。」\n",
            "春日:「反正不会是什么重要的事。」\n",
            "\n",
            "###\n",
            "阿虚:「你表情正经点的话 光外表的话就能和朝比奈学姐交换角色了」\n",
            "春日:「什么」\n",
            "阿虚:「没什么」\n",
            "春日:「那么大家鼓起劲干吧」\n",
            "\n",
            "###\n",
            "阿虚:「你为什么要剪头发啊？」\n",
            "春日:「没什么理由，就是想剪了而已。」\n",
            "###\n",
            "阿虚:「凉宫，你现在又想干嘛，先告诉你。我可不干那种强盗还有威胁的事喔!」\n",
            "凉宫:「你在胡说什么啊?我才不会做那种事咧!」\n",
            "阿虚:「是吗?那桌上的电脑是怎么来的？」\n",
            "凉宫:「当然是利用和平手段得来的啊!好啦，先看这个要紧。」\n",
            "\n",
            "###\n",
            "旁白:即然阿虚已经醒了\n",
            "春日:「好了 早就到了该回家的时候了，我们也回去吧」\n",
            "阿虚:「但是真糟糕啊 我没带雨伞」\n",
            "春日:「有一把就够了吧」(不好意思地转过脸去)\n",
            "###\n",
            "阿虚:「那这个网站谁来建啊？」\n",
            "春日:「当然是你!」\n",
            "春日:「反正你闲得要命，就你做吧!我还得去找剩下的社员呢!」\n",
            "春日:「这一两天就把它完成。没有网页，什么活动都没办法开始。」\n",
            "旁白:朝比奈趴在自顾自地看书的长门有希身旁的桌上，肩膀不停地颤抖着。阿虚看了看她，然后妥协了\n",
            "阿虚:「就算你这样说，我也没办法。」\n",
            "\n",
            "###\n",
            "阿虚:「哦 对了 你看这样如何，我们把这些全部集合起来 做戏剧占卜茶会咖啡馆怎么样」\n",
            "春日:「哈？别说那种白痴话了 立刻开始进行会议」\n",
            "###\n",
            "阿虚:「古泉说有急事要回去了，我的腿和手臂也都累得动不了了」\n",
            "春日:「既然你觉得可以 那就这样吧。我也有些饿了，去吃午饭吧！」\n",
            "\n",
            "###\n",
            "阿虚:「喂」\n",
            "春日:「嗯？」\n",
            "阿虚:「怎么这么轻易的就接受了，如果最后没法解决怎么办啊？」\n",
            "春日:「能解决的！那个社长肯定是犯了迟来两个月的五月病，所以把自己关在家里了」\n",
            "春日:「我们只要潜入他家里痛殴几拳再把他拖出来就好了」\n",
            "###\n",
            "旁白:和阿虚吵架后，春日想扎个马尾让阿虚开心一下。\n",
            "阿虚:「喂 春日」\n",
            "春日:「什么啊」\n",
            "阿虚:「这电影我绝对会让它成功的」\n",
            "春日:「当然啊，因为是我导演的呢。自然是和成功约好的 用不着你说也是」\n",
            "\n",
            "###\n",
            "阿虚:「我姑且问一句 去哪里？」\n",
            "春日:「当然是去市民游泳池啊，夏天当然要有夏天的样子 要做有夏天特色的事情」\n",
            "###\n",
            "旁白:阿虚姗姗来迟\n",
            "春日:「太慢了 阿虚！多拿点干劲出来！居然让本团长等你 你以为自己是谁啊。要惩罚啦 惩罚」\n",
            "阿虚:「我明明就提前了15分钟来 为什么每次都是最后啊」\n",
            "春日:「那么 全都到齐了 出发吧，古泉 你就载实玖瑠吧」\n",
            "朝比奈:「诶？」\n",
            "春日:「我和有希坐阿虚后面」\n",
            "###\n",
            "\n",
            "User: \n",
            "阿虚:「Haruhi, 你好啊」\n",
            "Please input your response: 春日:「当然，我很好！」\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "'春日:「当然，我很好！」'"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "string"
            }
          },
          "metadata": {},
          "execution_count": 16
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [],
      "metadata": {
        "id": "j8UYVSUZcgn3"
      },
      "execution_count": null,
      "outputs": []
    }
  ]
}